home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games 1996 July / Amiga Games 1996 #7.iso / spiele / publicdomain / ta-hack / source / ls.c < prev    next >
C/C++ Source or Header  |  1996-04-22  |  3KB  |  124 lines

  1. #include <string.h>
  2.  
  3. char *savefile = "AB.save";
  4.  
  5. char *Load(BOOL force, APTR ga_status){
  6.     FILE *file;
  7.     char i;
  8.     ULONG geslen=40, wrlen=40;
  9.     ULONG buf[5];
  10.     
  11.     if(ga_status){
  12.         set(ga_status, MUIA_Gauge_InfoText, "\0332loading...%ld%%");
  13.         set(ga_status, MUIA_Gauge_Current, 0);
  14.     }else{
  15.         printf("loading...00%"); fflush(stdout);
  16.     }
  17.     
  18.     file = fopen(savefile, "r");
  19.     if(!file)
  20.         goto loaderr;
  21.     if(fread(buf, 1, 20, file) != 20)
  22.         goto loaderr;
  23.     for(i=0; i<5; i++)
  24.         if(len[i] != buf[i]){
  25.             strcpy(err, "Bad SaveFile.");
  26.             goto tloaderr;
  27.         }
  28.     if(fread(buf, 1, 20, file) != 20)
  29.         goto loaderr;
  30.     for(i=0; (i<5) && (addrs[i] == (ULONG *)buf[i]); i++);
  31.     if(i<5 && !force){
  32.         strcpy(err, "Bad Addresses. (Try FORCE)");
  33.         goto tloaderr;
  34.     }
  35.     for(i=0; i<5; i++)
  36.         geslen += len[i];
  37.     if(ga_status){
  38.         set(ga_status, MUIA_Gauge_Current, 1);
  39.     }else{
  40.         printf("\b\b\b01%"); fflush(stdout);
  41.     }
  42.     for(i=0; i<5; i++){
  43.         if(fread(addrs[i], 1, len[i], file) != len[i])
  44.             goto loaderr;
  45.         wrlen += len[i];
  46.         if(ga_status){
  47.             set(ga_status, MUIA_Gauge_Current, (wrlen*100)/geslen);
  48.         }else{
  49.             printf("\b\b\b%02d%%",(wrlen*100)/geslen); fflush(stdout);
  50.         }
  51.     }
  52.     fclose(file);
  53.     if(!ga_status)
  54.         printf("\r");
  55.     return("Game loaded.");
  56.     
  57.     loaderr:
  58.     Fault(IoErr(),"LoadError",err,FAULT_MAX);
  59.     tloaderr:
  60.     if(file){
  61.         fclose(file);
  62.         remove(savefile);
  63.     }
  64.     if(!ga_status)
  65.         printf("\r");
  66.     else
  67.         set(ga_status, MUIA_Gauge_Current, 0);
  68.     return(err);
  69. }
  70.  
  71. char *Save(APTR ga_status){
  72.     FILE *file;
  73.     char i;
  74.     ULONG geslen=40, wrlen=40;
  75.     
  76.     if(ga_status){
  77.         set(ga_status, MUIA_Gauge_InfoText, "\0332saveing...%ld%%");
  78.         set(ga_status, MUIA_Gauge_Current, 0);
  79.     }else{
  80.         printf("saveing...00%"); fflush(stdout);
  81.     }
  82.     
  83.     file = fopen(savefile, "w");
  84.     if(!file)
  85.         goto saveerr;
  86.     if(fwrite(len, 1, 20, file) != 20)
  87.         goto saveerr;
  88.     if(fwrite(addrs, 1, 20, file) != 20)
  89.         goto saveerr;
  90.     for(i=0; i<5; i++)
  91.         geslen += len[i];
  92.     if(ga_status){
  93.         set(ga_status, MUIA_Gauge_Current, 1);
  94.     }else{
  95.         printf("\b\b\b01%"); fflush(stdout);
  96.     }
  97.     for(i=0; i<5; i++){
  98.         if(fwrite(addrs[i], 1, len[i], file) != len[i])
  99.             goto saveerr;
  100.         wrlen += len[i];
  101.         if(ga_status){
  102.             set(ga_status, MUIA_Gauge_Current, (wrlen*100)/geslen);
  103.         }else{
  104.             printf("\b\b\b%02d%%",(wrlen*100)/geslen); fflush(stdout);
  105.         }
  106.     }
  107.     fclose(file);
  108.     if(!ga_status)
  109.         printf("\r");
  110.     return("Game saved.");
  111.     
  112.     saveerr:
  113.     Fault(IoErr(),"SaveError",err,FAULT_MAX);
  114.     if(file){
  115.         fclose(file);
  116.         remove(savefile);
  117.     }
  118.     if(!ga_status)
  119.         printf("\r");
  120.     else
  121.         set(ga_status, MUIA_Gauge_Current, 0);
  122.     return(err);
  123. }
  124.